前幾天把模型、Benchmark、Agent Framework 都大致整理過一輪之後,今天終於可以開始收斂框架名單了。
目前我比較有興趣的有四個:
這四個其實都可以拿來做 Agent,但設計方向差很多。
有的框架很精簡,很多東西都要自己補;有的已經幫你把 Skill、Memory、Sub-agent、Filesystem 都準備好了;還有一種已經接近完整的 Personal Agent。
所以今天先來把這四個拆開看。
這一輪的目標也很單純:
先確認它們各自適合什麼情境,接著挑出幾個進到後面的實作測試。
這次的目標一直都沒有變。
我希望最後可以在自己的設備上,慢慢做出一個真的可以幫忙做事情的 Local Agent。
目前需求大概包含:
硬體目前就是前面提過的兩台:
MacBook Pro M3 Max
DGX Spark
所以這次挑框架時,我會特別在意幾件事情:
能不能接 Local LLM
Tool 能不能自己擴充
Skill 好不好管理
檔案操作方便不方便
之後能不能加監控
Agent 行為容不容易看懂
接著就直接看四個框架。
先看 Pi。
Pi 給我的第一個感覺就是:
很乾淨。
它沒有一開始就塞一大堆功能給你,核心主要處理幾件事情:
User
↓
Agent Loop
↓
LLM
↓
Tool
↓
Result
↓
LLM
預設工具也很簡單:
read
write
edit
bash
整體概念很好理解。
這點其實很適合現在這個系列,因為我本來就想知道 Agent 到底是怎麼工作的。
像是:
模型什麼時候決定用 Tool
Tool 回來的資料怎麼進 Context
下一輪模型怎麼接著判斷
Session 怎麼保存
這些東西在 Pi 裡面都比較容易看清楚。
Pi 有兩個我很在意的東西。
第一個是 Extension。
Extension 可以拿來:
例如之後想做這種流程:
Agent
↓
準備執行 bash
↓
Extension 攔截
↓
記錄 command
↓
判斷風險
↓
允許執行
這就很適合拿來做後面的可追溯跟安全控制。
第二個是 Skill。
Pi 可以透過 SKILL.md 來定義操作流程。
例如:
skills/
├── excel-report
├── pdf-analysis
├── word-report
└── web-research
收到任務後,Agent 再去載入對應的 Skill。
這種方式我蠻喜歡的。
因為 Local LLM 的 Context 本來就很寶貴,如果每次都把所有 Skill 全塞進 Prompt,跑沒幾次 Context 就會開始變得很肥。
我目前會把 Pi 放在這個位置:
Agent Harness
很適合自己慢慢蓋東西。
優點:
缺點也很明顯。
很多能力要自己補。
像 Browser、Office、複雜 Memory、完整 Sub-agent,都需要額外處理。
所以 Pi 很像拿到一台乾淨底盤。
車可以開。
後面要不要裝導航、環景、ADAS、冰箱,就看自己。
接下來是 Hugging Face 的 smolagents。
這個框架很小,寫法也很直接。
它其中一個最有特色的設計就是 CodeAgent。
一般 Agent 比較常看到的是:
LLM
↓
Tool Call
↓
Tool Result
↓
LLM
例如:
read_excel
↓
filter_data
↓
group_data
↓
write_excel
smolagents 的 CodeAgent 可以直接讓模型產生 Python 程式。
例如:
data = read_excel("sales.xlsx")
monthly = (
data.groupby("month")
["revenue"]
.sum()
)
save_excel(monthly, "report.xlsx")
接著把這段程式執行掉。
有些任務其實本來就很適合寫程式。
例如:
如果每一步都要回去問一次 LLM,整個流程可能會拉很長。
CodeAgent 可以把邏輯一次寫出來。
像:
讀資料
篩選
分組
統計
輸出
全部包在一段 Python 裡面完成。
對 Data Agent 來說,這個想法很有吸引力。
主要考量還是在 Local LLM。
讓 Agent 自己寫程式,模型要處理的事情會更多。
模型需要同時具備:
今天如果用的是很強的雲端模型,這些事情相對好處理。
但我現在是在資源有限的地端環境。
能跑的模型本來就受到:
記憶體
模型大小
量化
推論速度
Context
Tool Calling 能力
這些條件限制。
我現在想先把整體難度控制住。
假設 CodeAgent 執行失敗,可能的原因會很多:
模型程式寫錯
Library 用錯
資料格式理解錯
Debug 沒修好
Sandbox 有問題
環境套件不完整
這些風險加進來之後,會讓測試很難判斷到底是框架問題、模型問題,還是程式執行問題。
所以這一階段我先把 smolagents 留在旁邊。
之後如果專門做:
Data Agent
Code Agent
Excel Agent
我會再回頭測它。
目前先讓模型專心做:
理解任務
選 Tool
執行 Skill
判斷下一步
這樣比較符合目前的地端條件。
第三個是 Deep Agents。
這個跟我比較熟的 LangGraph 有直接關係。
可以先把關係理解成:
LangGraph
↓
Deep Agents
LangGraph 比較像底層 Runtime。
Deep Agents 則把很多常見的 Agent 能力先組好了。
目前像這些東西都已經準備好:
所以使用起來會比直接從 LangGraph 自己組簡單很多。
這個是我目前蠻想測的功能。
假設任務是:
搜尋資料
整理資料
分析內容
寫成報告
可以拆成:
Main Agent
│
├── Research Agent
├── Data Agent
└── Writer Agent
每個 Agent 各自處理自己的事情。
這樣 Context 會比較乾淨。
Research Agent 搜尋了一堆網頁,也不用全部塞回 Main Agent。
最後只把整理好的結果回傳。
對長任務來說,這個設計很重要。
它同樣可以透過 Skill 來管理能力。
例如:
skills/
excel-analysis
pdf-summary
report-writing
web-search
再搭配 Memory、Filesystem、Sub-agent 一起工作。
這就已經很接近一個完整的 Agent Application。
我本來就有在用 LangGraph。
所以 Deep Agents 後面如果要加:
Tracing
Checkpoint
Persistence
Evaluation
LangSmith
整體會比較順。
這對我後面想做 Agent 可追溯也很重要。
像:
用了什麼 Tool
每一步 Prompt 是什麼
Token 用多少
哪一步出錯
Agent 最後怎麼完成
LangGraph 這一套本來就比較成熟。
我目前會把它放在:
工程化 Agent Framework
它適合:
Pi 比較適合自己慢慢打造。
Deep Agents 則比較像很多零件已經幫你裝好,可以直接開始蓋完整系統。
最後一個是 Hermes Agent。
這個框架看一看,很容易開始失控。
因為它真的內建很多東西。
目前可以看到的能力包含:
大部分我想自己慢慢加的東西,它已經有了。
所以 Hermes 給我的感覺已經很接近:
Personal Agent
甚至有點像:
Agent OS
Hermes 也有 SKILL.md。
可以把不同能力拆開。
例如:
excel
pdf
server
travel
report
browser
需要時再載入。
這跟我想做的 Skill-based Agent 很接近。
Hermes 本身就有 Persistent Memory。
也就是 Agent 可以跨 Session 留下一些資訊。
再加上它現在強調的 Learning Loop,Agent 完成任務之後,可以把經驗整理成 Skill。
整個流程會變成:
完成任務
↓
留下經驗
↓
整理 Skill
↓
下次再使用
這個方向很接近我對 Personal Agent 的想像。
Hermes 有 MCP Client。
所以未來如果我要接:
Database
Git
Office
Browser
Internal API
可以直接透過 MCP 擴充。
這點跟我現在的技術方向也很合。
我現在會把 Hermes 放在:
完整 Agent System
它的優勢是:
相對的,很多東西都已經包好了。
如果後面要研究 Agent 每一層到底怎麼組,Pi 會比較透明。
如果想快速看看完整 Local Agent 可以做到什麼程度,Hermes 很值得測。
目前我的理解大概可以排成這樣:
smolagents
│
│ 極簡 Agent SDK
│
Pi
│
│ Agent Harness
│
Deep Agents
│
│ 工程化 Agent Framework
│
Hermes
│
│ 完整 Agent System
如果再口語一點:
smolagents
「模型自己寫程式處理。」
Pi
「核心給你,剩下自己裝。」
Deep Agents
「常用零件我先幫你裝好。」
Hermes
「你先用,很多東西我都準備好了。」
| 能力 | Pi | smolagents | Deep Agents | Hermes |
|---|---|---|---|---|
| Local LLM | ✅ | ✅ | ✅ | ✅ |
| Tool Calling | ✅ | ✅ | ✅ | ✅ |
| Skill | ✅ | 自行設計 | ✅ | ✅ |
| Filesystem | ✅ | Tool | ✅ | ✅ |
| Terminal | ✅ | Tool | ✅ | ✅ |
| Browser | 擴充 | Tool | Tool | ✅ |
| Memory | Session | 基礎 | ✅ | ✅ |
| Sub-agent | 可擴充 | ✅ | ✅ | ✅ |
| MCP | 可擴充 | 可整合 | ✅ | ✅ |
| Code Agent | Bash / Extension | 很強 | Tool | ✅ |
| Observability | 自己做 | Callback | LangSmith | 內建紀錄 |
| 開箱完整度 | 中 | 低 | 高 | 很高 |
| 客製自由度 | 很高 | 很高 | 高 | 中高 |
整理完之後,下一階段我先留下:
Pi
Deep Agents
Hermes
smolagents 先暫時跳過。
原因很單純。
我目前的 Local LLM 已經受到硬體條件限制。
如果再把:
寫程式
Debug
Library 使用
Sandbox
執行環境
這些風險一起加進來,整個測試的變數會太多。
所以這一階段先專心測 Tool-driven 跟 Skill-driven 的 Agent。
等後面要做 Code Agent 或 Data Agent,再把 smolagents 拉回來。
框架看到這裡差不多了。
後面我不打算再一直看 README。
下一步直接實作。
我會讓:
Pi
Deep Agents
Hermes
全部跑同一組條件:
相同設備
相同 Local LLM
相同任務
相同輸入資料
然後比較:
Task Success
Tool Calls
LLM Calls
Context
Skill Following
Execution Time
Token Usage
Error Recovery
Filesystem 操作
可追溯性
實作複雜度